package com.qilu.pe.dao.http;

import com.qilu.pe.base.BaseResult2;
import com.qilu.pe.base.BaseResult3;
import com.qilu.pe.dao.bean.AgentFlow;
import com.qilu.pe.dao.bean.AiExplain;
import com.qilu.pe.dao.bean.Article;
import com.qilu.pe.dao.bean.ArticleDetail;
import com.qilu.pe.dao.bean.Banner;
import com.qilu.pe.dao.bean.Category;
import com.qilu.pe.dao.bean.CategoryItem;
import com.qilu.pe.dao.bean.Clinic;
import com.qilu.pe.dao.bean.Coupon;
import com.qilu.pe.dao.bean.Crowd;
import com.qilu.pe.dao.bean.Doctor;
import com.qilu.pe.dao.bean.ExpertExplain;
import com.qilu.pe.dao.bean.ExpertUser;
import com.qilu.pe.dao.bean.History;
import com.qilu.pe.dao.bean.ImageUrl;
import com.qilu.pe.dao.bean.Income;
import com.qilu.pe.dao.bean.ItemSet;
import com.qilu.pe.dao.bean.ItemSetDetail;
import com.qilu.pe.dao.bean.ItemType;
import com.qilu.pe.dao.bean.Msg;
import com.qilu.pe.dao.bean.MyProOrder;
import com.qilu.pe.dao.bean.Order;
import com.qilu.pe.dao.bean.OrderDate;
import com.qilu.pe.dao.bean.OrderDetail;
import com.qilu.pe.dao.bean.OrderResult;
import com.qilu.pe.dao.bean.OrderSuccessInfo;
import com.qilu.pe.dao.bean.Patient;
import com.qilu.pe.dao.bean.PatientDetail;
import com.qilu.pe.dao.bean.PatientUserInfo;
import com.qilu.pe.dao.bean.Pdf;
import com.qilu.pe.dao.bean.PostCouponData;
import com.qilu.pe.dao.bean.PriceRangeOption;
import com.qilu.pe.dao.bean.Privacy;
import com.qilu.pe.dao.bean.Product;
import com.qilu.pe.dao.bean.ProductOrderDetails;
import com.qilu.pe.dao.bean.ProportionData;
import com.qilu.pe.dao.bean.Report;
import com.qilu.pe.dao.bean.ReportDetail;
import com.qilu.pe.dao.bean.ExReportDetailsResult;
import com.qilu.pe.dao.bean.RequestExpertDetails;
import com.qilu.pe.dao.bean.SampleAndConsume;
import com.qilu.pe.dao.bean.Score;
import com.qilu.pe.dao.bean.SetDetail;
import com.qilu.pe.dao.bean.SetType;
import com.qilu.pe.dao.bean.SettingData;
import com.qilu.pe.dao.bean.SettingsData;
import com.qilu.pe.dao.bean.ShopSettings;
import com.qilu.pe.dao.bean.Sick;
import com.qilu.pe.dao.bean.SickDetail;
import com.qilu.pe.dao.bean.SickType;
import com.qilu.pe.dao.bean.Test;
import com.qilu.pe.dao.bean.ProductPatientInfo;
import com.qilu.pe.dao.bean.TestHistory;
import com.qilu.pe.dao.bean.TestStatus;
import com.qilu.pe.dao.bean.TodayTest;
import com.qilu.pe.dao.bean.UPayInfo;
import com.qilu.pe.dao.bean.UnreadData;
import com.qilu.pe.dao.bean.WxPayInfo;

import java.util.List;
import java.util.Map;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.Query;

public interface ApiService {
//    //融云获取token接口
//    @FormUrlEncoded
//    @POST("getToken.json")
//    Observable<RongToken> reqRongToken(
//            @Header("App-Key") String appKey,
//            @Header("Nonce") String Nonce,
//            @Header("Timestamp") String Timestamp,
//            @Header("Signature") String Signature,
//            @Field("userId") String userId,
//            @Field("name") String name,
//            @Field("portraitUri") String portraitUri);
//
//    // chat/getUserInfo 获取用户信息
//    @GET("chat/getUserInfo")
//    Observable<BaseResult2<RongUser>> reqUserInfo(@Query("accountId") String accountId);
//
//    @Streaming
//    @GET
//    Observable<ResponseBody> downloadApk(@Url String url);

//    // retrofit
//    @Streaming
//    @GET
//    Call<ResponseBody> download(@Url String url);
//
//    @GET("member/address/api/list")
//    Observable<BaseResult2<List<Address>>> addressList(@Query("memberId") String memberId);
//
//    @POST("couponHistory/app/unLock")
//    Observable<BaseResult2> unLock(@Body RequestBody body);

    // 获取验证码
    @FormUrlEncoded
    @POST("api/send")
    Observable<BaseResult2> getMsgCode(@Field("phone") String phone);

    // 帐号密码注册
    @FormUrlEncoded
    @POST("api/register")
    Observable<BaseResult2> register(@Field("phone") String phone, @Field("code") String code, @Field("password") String password);

    // 帐号密码登录  <List<Login>>  {id:55}  登录会返回两种格式  code=4001时返回id,用来完善信息
    @FormUrlEncoded
    @POST("api/login")
    Observable<BaseResult2> login(@Field("phone") String phone, @Field("password") String password, @Field("type") String type);

    // 微信登录  http://yunjianyan.ilicloud.cn/api/appLogin
    @FormUrlEncoded
    @POST("api/appLogin")
    Observable<BaseResult2> wxLogin(@Field("unionid") String unionid, @Field("type") String type, @Field("picture") String picture
            , @Field("phone") String phone, @Field("password") String password, @Field("code") String code);

    // 验证码登录  http://yunjianyan.ilicloud.cn/api/codeLogin
    @FormUrlEncoded
    @POST("api/codeLogin")
    Observable<BaseResult2> loginByCode(@Field("phone") String phone, @Field("code") String code, @Field("type") String type);

    // 获取当前用户信息 type 用户角色(1医生,2专家,3物流,4患者)
    @FormUrlEncoded
    @POST("api/me")
    Observable<BaseResult2<List<Doctor>>> getUserInfo(@Header("Authorization") String Authorization, @Field("type") String type);

    // 首页banner图列表  是否首页显示（0否，1是）
    @GET("api/bannerList")
    Observable<BaseResult2<List<Banner>>> reqHomeBannerList(@Query("genre") String genre);

    // 首页项目列表  recommend 是否首页显示（0否，1是）
    @GET("api/projectList")
    Observable<BaseResult2<List<ItemSet>>> reqHomeItemList(@Query("recommend") String recommend);

    // 项目列表 根据项目分类查询项目 /api/projectList  rec 是否首页显示（0否，1是） type_id 项目分类
    @GET("api/projectList")
    Observable<BaseResult2<List<ItemSet>>> reqItemList(@Query("recommend") String recommend, @Query("type_id") String type_id);

    // 首页特色套餐  recommend 是否首页显示（0否，1是）
    @GET("api/comboList")
    Observable<BaseResult2<List<ItemSet>>> reqHomeSetList(@Query("recommend") String recommend);

    // 文章列表  recommend 是否首页显示（0否，1是）
    @GET("api/articleList")
    Observable<BaseResult2<List<Article>>> reqArticleList(@Query("recommend") String recommend
            , @Query("page") int page, @Query("pageSize") int pageSize);

    // 患者模块上方获取用户信息
    @GET("api/userInfo")
    Observable<BaseResult2<PatientUserInfo>> reqPatientTopUserInfo(@Header("Authorization") String Authorization);

    // 获取近期患者列表  是否固定死（只显示前几条，没有分页），1固定，0是否（默认0）
    @GET("api/getTestOrderUserList")
    Observable<BaseResult2<List<Patient>>> reqRecentPatientList(@Header("Authorization") String Authorization
            , @Query("page") int page, @Query("pageSize") int pageSize, @Query("now") int now);

    // 我的积分
    @GET("api/getUserScore")
    Observable<BaseResult2<List<Score>>> reqUserScore(@Header("Authorization") String Authorization, @Query("page") int page, @Query("pageSize") int pageSize);

    // 消息列表
    @POST("api/message")
    Observable<BaseResult2<List<Msg>>> reqMsgList(@Header("Authorization") String Authorization);

    // 预约时间
    @FormUrlEncoded
    @POST("api/time")
    Observable<BaseResult2<List<OrderDate>>> reqDateList(@Field("time") String time);

    // 预约时间2
    @FormUrlEncoded
    @POST("api/getTime")
    Observable<BaseResult2<List<OrderDate>>> reqDateList2(@Field("time") String time);

    // 机构患者列表 api/patientList
    @FormUrlEncoded
    @POST("api/patientList")
    Observable<BaseResult2<List<Patient>>> reqPatientListAgent(@Header("Authorization") String Authorization, @Field("time") String time);

    // 获取常规项目分类 http://yunjianyan.ilicloud.cn/api/getRoutine
    @FormUrlEncoded
    @POST("api/getRoutine")
    Observable<BaseResult2<List<ItemSet>>> reqComItemCategory(@Header("Authorization") String Authorization, @Field("time") String time);

    // 获取项目分类 http://yunjianyan.ilicloud.cn/api/getProjectType
    @FormUrlEncoded
    @POST("api/getRoutine")
    Observable<BaseResult2<List<ItemSet>>> reqAllItemCategory(@Header("Authorization") String Authorization, @Field("time") String time);

    // 预约下单获取套餐对应的项目信息 http://yunjianyan.ilicloud.cn/api/getComboEctype


    // 根据分单id获取样本和耗材信息 http://yunjianyan.ilicloud.cn/api/getSubmenu
//    @FormUrlEncoded
//    @POST("api/getSubmenu")
//    Observable<BaseResult2<List<SampleAndConsume>>> reqSampleAndConsumeList(@Field("subId[0]") String subId);

    // 根据分单id获取样本和耗材信息 http://yunjianyan.ilicloud.cn/api/getSubmenu
    @FormUrlEncoded
    @POST("api/getSubmenu")
    Observable<BaseResult2<List<SampleAndConsume>>> reqSampleAndConsumeList(@FieldMap Map<String, String> submenu);

    @POST("api/getSubmenu")
    Observable<BaseResult2<List<SampleAndConsume>>> reqSampleAndConsumeList2(@Body RequestBody body);

    // 确定新增预约订单 http://yunjianyan.ilicloud.cn/api/addTestOrder
    @FormUrlEncoded
    @POST("api/addTestOrder")
    Observable<BaseResult2<OrderSuccessInfo>> reqSubmitPlaceOrder(
            @Field("test") String test, @Header("Authorization") String Authorization, @Field("combo") String combo
            , @Field("project") String project, @Field("submenu") String submenu, @Field("count") String count
            , @Field("sid") String sid, @Field("samp_time") String samp_time, @Field("money") String money
            , @Field("price") String price, @Field("time") String time, @Field("freight") String freight
            , @Field("remark") String remark, @Field("diagnose") String diagnose, @Field("discount") String discount);

    // 确定新增预约订单 http://yunjianyan.ilicloud.cn/api/addTestOrder
    @FormUrlEncoded
    @POST("api/addTestOrder")
    Observable<BaseResult3> reqSubmitPlaceOrder2(
            @Field("test") String test, @Header("Authorization") String Authorization, @FieldMap Map<String, String> combo
            , @FieldMap Map<String, String> project, @FieldMap Map<String, String> submenu, @Field("count") String count
            , @Field("sid") String sid, @Field("samp_time") String samp_time, @Field("money") String money
            , @Field("price") String price, @Field("time") String time, @Field("freight") String freight
            , @Field("remark") String remark, @Field("diagnose") String diagnose, @Field("discount") String discount);

    // 预约列表 http://yunjianyan.ilicloud.cn/api/getOrderList
    @FormUrlEncoded
    @POST("api/getOrderList")
    Observable<BaseResult2<List<Order>>> reqOrderList(@Header("Authorization") String Authorization, @Field("name") String name
            , @Field("page") int page, @Field("pageSize") int pageSize, @Field("time") String time);

    // 获取病史列表 http://yunjianyan.ilicloud.cn/api/getMedicalList
    @FormUrlEncoded
    @POST("api/getMedicalList")
    Observable<BaseResult2<List<History>>> reqMedicalHistoryList(@Field("subId") String subId);

    // 商城-获取商品分类 api/getClassify
    @GET("api/getClassify")
    Observable<BaseResult2<List<Category>>> reqMallCategoryList(@Header("Authorization") String Authorization, @Query("hehe") String hehe);

    // 商城-商品列表 order 排序（1价格倒序，2价格正序，默认最新）
    @GET("api/getGoodsList")
    Observable<BaseResult2<List<Product>>> reqProductList(@Query("page") int page, @Query("pageSize") int pageSize
            , @Query("order") String order, @Query("price") String price, @Query("classify_id") String classify_id);

    // 获取商品详情
    @GET("api/getGoodsDetail")
    Observable<BaseResult2<Product>> reqProductDetail(@Query("id") String id);

    // /api/addPatientUser 添加患者，信息录入
    @FormUrlEncoded
    @POST("api/addPatientUser")
    Observable<BaseResult2> reqAddPatient(@Header("Authorization") String Authorization, @Field("name") String name
            , @Field("phone") String phone, @Field("sex") String sex, @Field("birth") String birth
            , @Field("identity") String identity, @Field("picture") String picture, @Field("blood") String blood
            , @Field("medical") String medicalId, @Field("remark") String remark);

    // 获取病史列表 http://yunjianyan.ilicloud.cn/api/getMedicalList
    @GET("api/getMedicalList")
    Observable<BaseResult2<List<History>>> reqMedicalHistoryList();

    // 图片上传 http://yunjianyan.ilicloud.cn/api/upload
    @POST("api/upload")
    Observable<BaseResult2<List<ImageUrl>>> reqUploadImg(@Body MultipartBody multipartBody);

    @Multipart
    @POST("api/upload")
    Observable<BaseResult2<List<ImageUrl>>> reqUploadImg(@Part MultipartBody.Part picture);

    // 搜索项目 http://yunjianyan.ilicloud.cn/api/searchProject  type 1 项目,2 套餐 (可为空)
    @FormUrlEncoded
    @POST("api/searchProject")
    Observable<BaseResult2<List<ItemSet>>> reqSearchItemList(@Field("name") String name, @Field("type") String type);

    // 搜索套餐 http://yunjianyan.ilicloud.cn/api/searchProject  type 1 项目,2 套餐 (可为空)
    @FormUrlEncoded
    @POST("api/searchProject")
    Observable<BaseResult2<List<ItemSet>>> reqSearchSetList(@Field("name") String name, @Field("type") String type);

    // 项目分类 http://yunjianyan.ilicloud.cn/api/getProjectType
    @FormUrlEncoded
    @POST("api/getProjectType")
    Observable<BaseResult2<List<ItemType>>> reqItemTypeList(@Field("name") String name);

    // 我的订单 http://yunjianyan.ilicloud.cn/api/getOrder
    @FormUrlEncoded
    @POST("api/getOrder")
    Observable<BaseResult2<List<Order>>> reqMyOrderList(@Header("Authorization") String Authorization
            , @Field("type") String type, @Field("page") int page, @Field("pageSize") int pageSize, @Field("time") String time, @Field("name") String name);

    // 专家端我的信息 /api/userInfo
    @GET("api/userInfo")
    Observable<BaseResult2<ExpertUser>> reqUserInfo(@Header("Authorization") String Authorization);

    // 我的诊所 /api/getOrganization
    @GET("api/getOrganization")
    Observable<BaseResult2<Clinic>> reqMyClinic(@Header("Authorization") String Authorization, @Query("org_id") String org_id);

    // 我的诊所医生  /api/getDoctor
    @GET("api/getDoctor")
    Observable<BaseResult2<List<Doctor>>> reqMyClinicDoctorList(@Header("Authorization") String Authorization, @Query("org_id") String org_id);

    // 创建医生帐号 http://yunjianyan.ilicloud.cn/api/doctor
    @FormUrlEncoded
    @POST("api/doctor")
    Observable<BaseResult2> reqAddDoctor(@Header("Authorization") String Authorization
            , @Field("picture") String picture, @Field("password") String password
            , @Field("name") String name, @Field("sex") String sex, @Field("identity") String identity
            , @Field("phone") String phone, @Field("year") String year);

    // 删除医生  /api/deleteDoctor
    @DELETE("api/deleteDoctor")
    Observable<BaseResult2> reqDelDoctor(@Header("Authorization") String Authorization, @Query("doctor_id") String doctor_id);

    // 我的机构运费券 http://yunjianyan.ilicloud.cn/api/getDiscountList
    @FormUrlEncoded
    @POST("api/getDiscountList")
    Observable<BaseResult2<List<Coupon>>> reqMyCouponList(@Header("Authorization") String Authorization, @Field("type") String type);

    // 我的收入 /api/myIncome
    @GET("api/myIncome")
    Observable<BaseResult2<List<Income>>> reqMyIncomeList(@Header("Authorization") String Authorization
            , @Query("page") int page, @Query("pageSize") int pageSize
            , @Query("start_time") String start_time, @Query("end_time") String end_time);

    // 获取适应人群 /api/getCrowd
    @GET("api/getCrowd")
    Observable<BaseResult2<List>> reqCrowdList(@Header("Authorization") String Authorization, @Query("hehe") String hehe);

    // 获取生活习惯 getHabit
    @GET("api/getHabit")
    Observable<BaseResult2<List<Crowd>>> reqHabitList(@Header("Authorization") String Authorization, @Query("hehe") String hehe);

    // 获取检验项目列表 根据习惯 getProjectList
    @GET("api/getProjectList")
    Observable<BaseResult2<List<ItemSet>>> reqItemListByHabit(@Query("habit[]") String[] habit, @Query("adapt") int adapt
            , @Query("type_id") String type_id, @Query("page") int page, @Query("pageSize") int pageSize);

    // 获取疾病分类 getIllnessType
    @GET("api/getIllnessType")
    Observable<BaseResult2<List<SickType>>> reqSickTypeList(@Header("Authorization") String Auth, @Query("he") String he);

    // 获取疾病列表 http://ydt.lstranger.cn/api/getIllnessList
    @GET("api/getIllnessList")
    Observable<BaseResult2<List<Sick>>> reqSickList(@Query("type") String type);

    // 意见反馈 createCouple
    @FormUrlEncoded
    @POST("api/createCouple")
    Observable<BaseResult2> reqFeedback(@Header("Authorization") String Authorization, @Field("info") String info);

    // 更换手机号 http://yunjianyan.ilicloud.cn/api/mobile
    @FormUrlEncoded
    @POST("api/mobile")
    Observable<BaseResult2> reqChangePhone(@Header("Authorization") String Authorization
            , @Field("phone") String phone, @Field("code") String code);

    // 忘记或修改密码 http://yunjianyan.ilicloud.cn/api/forget
    @FormUrlEncoded
    @POST("api/forget")
    Observable<BaseResult2> reqChangePwd(@Header("Authorization") String Authorization
            , @Field("phone") String phone, @Field("code") String code, @Field("password") String password);

    // 疾病详情 http://ydt.lstranger.cn/api/getIllnessDetail
    @GET("api/getIllnessDetail")
    Observable<BaseResult2<SickDetail>> reqSickDetail(@Query("id") String id);

    // 充值 /api/recharge
    @FormUrlEncoded
    @POST("api/recharge")
    Observable<BaseResult2> reqRechargeAli(@Header("Authorization") String Authorization
            , @Field("money") double money, @Field("pay_type") String pay_type);

    // 充值 /api/recharge
    @FormUrlEncoded
    @POST("api/recharge")
    Observable<BaseResult2<WxPayInfo>> reqRechargeWx(@Header("Authorization") String Authorization
            , @Field("money") double money, @Field("pay_type") String pay_type);

    // 获取特检数据 今日检验? /api/testOrderList  now 1 获取当天数据 expert 0  未解读 1 解读
    @GET("api/testOrderList")
    Observable<BaseResult2<List<TodayTest>>> reqtestOrderList(@Header("Authorization") String Authorization
            , @Query("page") int page, @Query("pageSize") int pageSize, @Query("patient_id") String patient_id
            , @Query("status") String status, @Query("now") String now, @Query("expert") String expert);

    // 获取患者信息 getPatientInfo
    @GET("api/getPatientInfo")
    Observable<BaseResult2<PatientDetail>> reqPatientInfo(@Header("Authorization") String Authorization, @Query("id") String id);

    // 项目信息详情(患者详情页面,检验历史) /api/getProductPatientInfo TestHistory
    @GET("api/getProductPatientInfo")
    Observable<BaseResult2<ProductPatientInfo>> reqProductPatientInfo(@Header("Authorization") String Authorization, @Query("id") String id);

    // 项目订单信息 /api/getProductOrderList
    @GET("api/getProductOrderList")
    Observable<BaseResult2<List<Test>>> reqProductOrderList(@Header("Authorization") String Authorization, @Query("id") String id);

    // 创建机构和完善负责人信息 http://yunjianyan.ilicloud.cn/api/principal
    @FormUrlEncoded
    @POST("api/principal")
    Observable<BaseResult2> reqRealAuthAgent(@Field("id") String id, @Field("picture") String picture
            , @Field("sex") String sex, @Field("name") String name, @Field("identity") String identity
            , @Field("organization") String organization, @Field("org_type") String org_type, @Field("licence") String licence
            , @Field("area") String area, @Field("address") String address, @Field("tel") String tel);

    // 获取报告列表 http://yunjianyan.ilicloud.cn/api/getReportLists
    @FormUrlEncoded
    @POST("api/getReportLists")
    Observable<BaseResult2<List<Report>>> reqReportList(@Header("Authorization") String Authorization, @Field("type") String type,
                                                        @Field("page") int page, @Field("pageSize") int pageSize, @Field("time") String time, @Field("name") String name);

    // 检验状态 http://yunjianyan.ilicloud.cn/api/getInspectList
    @FormUrlEncoded
    @POST("api/getInspectList")
    Observable<BaseResult2<List<TestStatus>>> reqTestStatusList(@Header("Authorization") String Authorization, @Field("type") String type);

    // 报告详情 http://yunjianyan.ilicloud.cn/api/getReportInfo

    // 专家解读列表 /api/getDoctorReportList
    @GET("api/getDoctorReportList")
    Observable<BaseResult2<List<ExpertExplain>>> reqExpertReadList(@Header("Authorization") String Authorization
            , @Query("status") String status, @Query("page") int page, @Query("pageSize") int pageSize);

    // 发起预约下单支付 http://yunjianyan.ilicloud.cn/api/editTestOrder 支付宝
    @FormUrlEncoded
    @POST("api/editTestOrder")
    Observable<BaseResult2> reqPlaceOrderPayAli(@Header("Authorization") String Authorization
            , @Field("order_no") String order_no, @Field("pay_type") String pay_type);

    // 发起预约下单支付 http://yunjianyan.ilicloud.cn/api/editTestOrder 微信
    @FormUrlEncoded
    @POST("api/editTestOrder")
    Observable<BaseResult2<WxPayInfo>> reqPlaceOrderPayWx(@Header("Authorization") String Authorization
            , @Field("order_no") String order_no, @Field("pay_type") String pay_type);

    // 发起预约下单支付 http://yunjianyan.ilicloud.cn/api/editTestOrder 银联
    @FormUrlEncoded
    @POST("api/editTestOrder")
    Observable<BaseResult2<UPayInfo>> reqPlaceOrderPayUpay(@Header("Authorization") String Authorization
            , @Field("order_no") String order_no, @Field("pay_type") String pay_type);

    // 发起预约下单支付 http://yunjianyan.ilicloud.cn/api/editTestOrder 余额
    @FormUrlEncoded
    @POST("api/editTestOrder")
    Observable<BaseResult2> reqPlaceOrderPayBalance(@Header("Authorization") String Authorization
            , @Field("order_no") String order_no, @Field("pay_type") String pay_type);

    // 专家解读支付 /api/payReadOrder 支付宝
    @GET("api/payReadOrder")
    Observable<BaseResult2> reqExpertOrderPayAli(@Header("Authorization") String Authorization
            , @Query("order_no") String order_no, @Query("pay_type") String pay_type);

    // 专家解读支付  /api/payReadOrder 微信
    @GET("api/payReadOrder")
    Observable<BaseResult2<WxPayInfo>> reqExpertOrderPayWx(@Header("Authorization") String Authorization
            , @Query("order_no") String order_no, @Query("pay_type") String pay_type);

    // 专家解读支付  /api/payReadOrder 银联
    @GET("api/payReadOrder")
    Observable<BaseResult2<UPayInfo>> reqExpertOrderPayUpay(@Header("Authorization") String Authorization
            , @Query("order_no") String order_no, @Query("pay_type") String pay_type);

    // 专家解读支付  /api/payReadOrder 余额
    @GET("api/payReadOrder")
    Observable<BaseResult2> reqExpertOrderPayBalance(@Header("Authorization") String Authorization
            , @Query("order_no") String order_no, @Query("pay_type") String pay_type);

    // 商城支付 商城发起支付 /api/shopOrderPay 支付宝
    @GET("api/shopOrderPay")
    Observable<BaseResult2> reqshopOrderPayAli(@Header("Authorization") String Authorization
            , @Query("order_no") String order_no, @Query("pay_type") String pay_type);

    // 商城支付 商城发起支付 /api/shopOrderPay 微信
    @GET("api/shopOrderPay")
    Observable<BaseResult2<WxPayInfo>> reqshopOrderPayWx(@Header("Authorization") String Authorization
            , @Query("order_no") String order_no, @Query("pay_type") String pay_type);

    // 商城支付 商城发起支付 /api/shopOrderPay 银联
    @GET("api/shopOrderPay")
    Observable<BaseResult2<UPayInfo>> reqshopOrderPayUpay(@Header("Authorization") String Authorization
            , @Query("order_no") String order_no, @Query("pay_type") String pay_type);

    // 商城支付 商城发起支付 /api/shopOrderPay 余额
    @GET("api/shopOrderPay")
    Observable<BaseResult2> reqshopOrderPayBalance(@Header("Authorization") String Authorization
            , @Query("order_no") String order_no, @Query("pay_type") String pay_type);

    // 项目详情 /api/projectDetail/1
    @GET("api/projectDetail/{id}")
    Observable<BaseResult2<ItemSetDetail>> reqItemSetDetail(@Path("id") String id);

    // 套餐详情 /api/comboDetail/1
    @GET("api/comboDetail/{id}")
    Observable<BaseResult2<SetDetail>> reqSetDetail(@Path("id") String id);

    // 获取隐私或声明 http://yunjianyan.ilicloud.cn/api/privacy
    @FormUrlEncoded
    @POST("api/privacy")
    Observable<BaseResult2<List<Privacy>>> reqPrivacy(@Field("type") String type);

    // 文章详情 /api/articleDetail/{id}
    @GET("api/articleDetail/{id}")
    Observable<BaseResult2<ArticleDetail>> reqArticleDetail(@Path("id") String id);

    // 商品订单 我的商品 /api/getShopOrderList
    @GET("api/getShopOrderList")
    Observable<BaseResult2<List<MyProOrder>>> reqMyProOrderList(@Header("Authorization") String Authorization
            , @Query("page") int page, @Query("pageSize") int pageSize, @Query("status") String status);

    // ai解读 http://yunjianyan.ilicloud.cn/api/searchAi
    @FormUrlEncoded
    @POST("api/searchAi")
    Observable<BaseResult2<List<AiExplain>>> reqAiSearchList(@Field("name") String name, @Field("english") String english);

    // 项目收藏 projectCollect type 检验是否收藏（传输1）
    @FormUrlEncoded
    @POST("api/projectCollect")
    Observable<BaseResult2<List>> reqProjectCollect(@Header("Authorization") String Authorization
            , @Field("type") String type, @Field("id") String id);

    // 套餐收藏 /api/comboCollect
    @FormUrlEncoded
    @POST("api/comboCollect")
    Observable<BaseResult2<List>> reqSetCollect(@Header("Authorization") String Authorization
            , @Field("type") String type, @Field("id") String id);

    // 我的收藏 /api/getUserCollect  我的-收藏  预约下单-选择收藏项目 同用这一个接口
    @GET("api/getUserCollect")
    Observable<BaseResult2<List<ItemSet>>> reqMyCollectList(@Header("Authorization") String Authorization
            , @Query("page") int page, @Query("pageSize") int pageSize);

    // 根据套餐查询其中的项目 http://yunjianyan.ilicloud.cn/api/getComboEctype
    @FormUrlEncoded
    @POST("api/getComboEctype")
    Observable<BaseResult2<List<ItemSet>>> reqItemInSetList(@Field("id") String id);

    // 机构流水 /api/getMyFlowing 支付类型（1微信,2支付宝,3银联支付,4余额支付）
    @GET("api/getMyFlowing")
    Observable<BaseResult2<List<AgentFlow>>> reqAgentFlowList(@Header("Authorization") String Authorization
            , @Query("page") int page, @Query("pageSize") int pageSize, @Query("org_id") String org_id
            , @Query("expert") String expert, @Query("pay_type") String pay_type);

    // 获取套餐分类 /api/getComboTypeList
    @GET("api/getComboTypeList")
    Observable<BaseResult2<List<SetType>>> reqSetTypeList(@Query("id") String id);

    // 获取套餐列表 ai-套餐 /api/getComboList
    @GET("api/getComboList")
    Observable<BaseResult2<List<ItemSet>>> reqSetList(@Query("type_id") String type_id
            , @Query("page") int page, @Query("pageSize") int pageSize);

    // 获取订单详情 http://yunjianyan.ilicloud.cn/api/getOrderInfo
    @FormUrlEncoded
    @POST("api/getOrderInfo")
    Observable<BaseResult2<OrderDetail>> reqOrderDetail(@Header("Authorization") String Authorization, @Field("id") String id);

    // 取消预约 取消订单 /api/cancelTestOrder
    @PUT("api/cancelTestOrder")
    Observable<BaseResult2> reqCancelOrder(@Header("Authorization") String Authorization, @Query("id") String id);

    // 创建商城订单 /api/createShopOrder
    @FormUrlEncoded
    @POST("api/createShopOrder")
    Observable<BaseResult2<OrderResult>> reqCreateProductOrder(@Header("Authorization") String Authorization
            , @Field("good_id") String good_id, @Field("price") String price, @Field("username") String username
            , @Field("phone") String phone, @Field("area") String area
            , @Field("address") String address, @Field("count") String count, @Field("score") int useScore);

    // 报告详情 http://yunjianyan.ilicloud.cn/api/getReportInfo
    @FormUrlEncoded
    @POST("api/getReportInfo")
    Observable<BaseResult2<List<ReportDetail>>> reqReportDetail(@Header("Authorization") String Authorization, @Field("order_id") String order_id);

    // 创建报告解读 /api/createReadOrder
    @FormUrlEncoded
    @POST("api/createReadOrder")
    Observable<BaseResult2<List<OrderResult>>> reqCreateExpertOrder(@Header("Authorization") String Authorization
            , @Field("expert") String expert, @Field("height") String height, @Field("weight") String weight
            , @Field("heart") String heart, @Field("temperature") String temperature, @Field("blood") String blood
            , @Field("family") String family, @Field("treatment") String treatment, @Field("drug") String drug
            , @Field("allergy") String allergy, @Field("text") String text, @Field("order_id") String order_id
            , @Field("sid") String sid, @Field("image[]") List<String> uploadImageList);

    // 获取专家列表 ydt.lstranger.cn/api/getExpert
    @GET("api/getExpert")
    Observable<BaseResult2<List<ExpertUser>>> reqExpertList(@Header("Authorization") String Authorization, @Query("page") int page, @Query("pageSize") int pageSize);

    // 获取pdf列表 http://yunjianyan.ilicloud.cn/api/getPDF
    @FormUrlEncoded
    @POST("api/getPDF")
    Observable<BaseResult2<List<Pdf>>> reqPdfList(@Header("Authorization") String Authorization, @Field("order_id") String order_id);

    // 校验验证码 http://yunjianyan.ilicloud.cn/api/checkCode
    @FormUrlEncoded
    @POST("api/checkCode")
    Observable<BaseResult2> reqAuthSmsCode(@Field("phone") String phone, @Field("code") String code);

    @GET("api/getSetting")
    Observable<BaseResult2<SettingData>> getSetting(@Header("Authorization") String Authorization);

    // 获取系统设置信息 http://yunjianyan.ilicloud.cn/api/getSettings
    @POST("api/getSettings")
    Observable<BaseResult2<List<SettingsData>>> getSettings(@Header("Authorization") String Authorization);

    @POST("api/getSettings")
    Observable<BaseResult2<List<SettingsData>>> getSettings1();

    @POST("api/getProportion")
    Observable<BaseResult2<List<ProportionData>>> getProportion(@Header("Authorization") String Authorization);

    @FormUrlEncoded
    @POST("api/getDiscount")
    Observable<BaseResult2<List<PostCouponData>>> getPostCoupon(@Header("Authorization") String Authorization, @Field("time") String orderTime);

    @FormUrlEncoded
    @POST("api/delRefund")
    Observable<BaseResult2> cancelMyOrder(@Header("Authorization") String Authorization, @Field("order_id") String orderId);

    @FormUrlEncoded
    @POST("api/addRefund")
    Observable<BaseResult2> refundMyOrder(@Header("Authorization") String Authorization, @Field("order_id") String orderId);

    @FormUrlEncoded
    @POST("api/editRefund")
    Observable<BaseResult2> refundMyOrderItem(@Header("Authorization") String Authorization, @Field("order_id") String orderId, @Field("id") String id);

    @FormUrlEncoded
    @POST("api/searchPatient")
    Observable<BaseResult2<List<Patient>>> searchPatient(@Header("Authorization") String Authorization, @Field("phone") String phone, @Field("name") String name);

    @GET("api/testOrderList")
    Observable<BaseResult2<List<TestHistory>>> getTestHistory(@Header("Authorization") String Authorization, @Query("page") int page, @Query("pageSize") int pageSize,
                                                              @Query("patient_id") int patientId);

    @GET("api/getReadOrderDetail")
    Observable<BaseResult2<List<RequestExpertDetails>>> getRequestExpertDetails(@Header("Authorization") String Authorization, @Query("order_id") String orderId);

    @POST("api/newMsg")
    Observable<BaseResult2<List<UnreadData>>> getUnreadMsg(@Header("Authorization") String Authorization);

    @POST("api/editMsg")
    Observable<BaseResult2> tagAllMsgRead(@Header("Authorization") String Authorization);

    @FormUrlEncoded
    @POST("api/editMsg")
    Observable<BaseResult2> tagMsgRead(@Header("Authorization") String Authorization, @Field("id") String msgId);

    @FormUrlEncoded
    @POST("api/delMsg")
    Observable<BaseResult2> delMsg(@Header("Authorization") String Authorization, @Field("id[]") String[] msgIdArray);

    @FormUrlEncoded
    @POST("api/editOrder")
    Observable<BaseResult2> editOrder(@Header("Authorization") String Authorization, @Field("samp_time") String sampTime, @Field("diagnose") String dianose, @Field("remark") String remark, @Field("id") String orderId);

    @GET("api/getexReportInfo")
    Observable<BaseResult2<ExReportDetailsResult>> getReportDetail(@Header("Authorization") String Authorization, @Query("order_id") String orderId);

    @FormUrlEncoded
    @POST("api/getAiInfo")
    Observable<BaseResult2<List<AiExplain>>> getAiReportDetails(@Header("Authorization") String Authorization, @Field("order_id") String orderId);

    @FormUrlEncoded
    @POST("api/editPatient")
    Observable<BaseResult2> editPatient(@Header("Authorization") String Authorization, @Field("name") String name, @Field("phone") String phone, @Field("sex") String sex,
                                        @Field("birth") String birth, @Field("picture") String picture, @Field("identity") String identity, @Field("blood") String blood,
                                        @Field("medical") String medical, @Field("remark") String remark, @Field("id") String id);

    @GET("api/getDoctorDetail")
    Observable<BaseResult2<Doctor>> getDoctorDetail(@Header("Authorization") String Authorization, @Query("doctor_id") String doctorId);

    @FormUrlEncoded
    @PUT("api/saveDoctor")
    Observable<BaseResult2> editDoctor(@Header("Authorization") String Authorization, @Field("doctor_id") String id, @Field("picture") String picture, @Field("password") String password
            , @Field("name") String name, @Field("sex") String sex, @Field("identity") String identity
            , @Field("phone") String phone, @Field("year") String year);

    @FormUrlEncoded
    @PUT("api/saveDoctor")
    Observable<BaseResult2> editMyInfo(@Header("Authorization") String Authorization, @Field("doctor_id") String id, @Field("picture") String picture,
                                       @Field("name") String name, @Field("sex") String sex, @Field("year") String year);

    @GET("api/getClassify")
    Observable<BaseResult2<List<CategoryItem>>> getShopCategory(@Header("Authorization") String Authorization);

    @GET("api/getGoodsPriceList")
    Observable<BaseResult2<List<PriceRangeOption>>> getPriceRange(@Header("Authorization") String Authorization);

    @GET("api/getShopOrderSetting")
    Observable<BaseResult2<List<ShopSettings>>> getShopOrderSetting(@Header("Authorization") String Authorization);

    @GET("api/getShopOrderDetail")
    Observable<BaseResult2<ProductOrderDetails>> getProductOrderDetails(@Header("Authorization") String Authorization, @Query("id") String id);

    @FormUrlEncoded
    @PUT("api/shopOrderHandle")
    Observable<BaseResult2> cancelProductOrder(@Header("Authorization") String Authorization, @Field("id") int id, @Field("type") int type);

    @FormUrlEncoded
    @PUT("api/saveShopOrder")
    Observable<BaseResult2> editProductOrder(@Header("Authorization") String Authorization, @Field("id") int id, @Field("username") String username,
                                             @Field("phone") String phone, @Field("area") String area, @Field("address") String address);
}